#include "BinaryIO.h"

long BinaryIO::find_pattern(std::ifstream& file, const std::vector<uint8_t>& pattern) {
    if (pattern.empty()) {
        return -1;
    }
    
    long position = file.tellg();
    long file_size = 0;
    
    // 获取文件大小
    file.seekg(0, std::ios::end);
    file_size = file.tellg();
    file.seekg(position);
    
    if (position + pattern.size() > file_size) {
        file.seekg(position);
        return -1;
    }
    
    std::vector<uint8_t> buffer(pattern.size());
    
    // 从当前位置开始搜索
    while (position + pattern.size() <= file_size) {
        file.read(reinterpret_cast<char*>(buffer.data()), pattern.size());
        
        // 检查是否匹配模式
        bool match = true;
        for (size_t i = 0; i < pattern.size(); ++i) {
            if (buffer[i] != pattern[i]) {
                match = false;
                break;
            }
        }
        
        if (match) {
            // 找到了匹配，返回到匹配开始的位置
            file.seekg(position);
            return position;
        }
        
        // 移动到下一个位置（回退pattern.size()-1个字节，然后前进1个字节）
        position += 1;
        file.seekg(position);
    }
    
    // 没有找到匹配
    file.seekg(position);
    return -1;
}